package role_api

import (
	"benkendSystem/database"
	"benkendSystem/models"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"net/http"
)

// UpdateRole 跟新角色
func UpdateRole(c *gin.Context) {
	in := new(UpdateRoleRequest)
	err := c.ShouldBindJSON(in)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 500,
			"msg":  "参数错误",
		})
		return
	}
	err = database.DB.Transaction(func(tx *gorm.DB) error {
		// 跟新数据
		err = database.DB.Model(new(models.Role)).Where("id = ?", in.ID).Updates(map[string]any{
			"name":     in.Name,
			"is_admin": in.IsAdmin,
			"sort":     in.Sort,
		}).Error
		if err != nil {
			return err
		}
		// 删除该角色已经授权的菜单（删除老数据） 使用Unscoped进行硬删除
		err = tx.Where("id = ?", in.ID).Unscoped().Delete(&models.Role{}).Error
		if err != nil {
			return err
		}
		// 增加新授权菜单数据
		rms := make([]*models.RoleMenu, len(in.MenuId))
		for i, _ := range rms {
			rms[i] = &models.RoleMenu{
				RoleId: in.ID,
				MenuId: in.MenuId[i],
			}
		}
		if len(rms) > 0 {
			err = tx.Create(rms).Error
			if err != nil {
				return err
			}
		}
		return nil
	})
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code": 500,
			"msg":  "系统错误",
		})
		return
	}
	c.JSON(http.StatusOK, gin.H{
		"code": 200,
		"msg":  "操作成功",
	})
}
